跳到主要内容

元数据设置

本指南演示如何为您的 OV80i 摄像头图像配置元数据。元数据是与每张捕获图像一起存储的自定义信息,帮助您跟踪重要细节,如零件编号、序列号或生产数据。

元数据的使用场景: 生产追踪、零件识别、质量控制记录、批次信息、操作员识别,或任何需要与检测图像关联的自定义数据。

先决条件

  • 已设置并连接 OV80i 摄像头系统
  • 配置了包含成像和检测设置的活动 recipe
  • 至少配置了一个 AI 模块(分类或分割)
  • 了解您希望从检测结果中跟踪的数据

什么是元数据?

元数据是附加到每张捕获图像的额外信息。该信息:

  • 与图像一起存储在摄像头的库中
  • 在 HMI 中显示,供操作员查看
  • 有助于识别和追踪特定零件或生产批次
  • 可以在库中搜索以进行分析

有用的元数据示例:

  • 零件编号(例如,“P12345”)
  • 序列号(例如,“SN987654”)
  • 操作员姓名(例如,“John_Smith”)
  • 班次信息(例如,“A_Shift”)
  • 批次号(例如,“Batch_2025_001”)

重要提示: 元数据只能在检测完成时保存。元数据必须是从摄像头捕获并处理图像后“所有模块输出(All Block Outputs)”开始的流程的一部分。

步骤 1:访问 Node-RED 编辑器

1.1 导航至 IO Block

  1. 在 Recipe Editor 中打开您的活动 recipe
  2. 点击面包屑菜单中的“IO Block”
  3. 点击“Configure IO”进入 Node-RED 编辑器

1.2 验证 Node-RED 界面

检查点: 您应看到带有现有 IO Block 流程和左侧节点面板的 Node-RED 流程编辑器。

步骤 2:定位“所有模块输出(All Block Outputs)”节点

2.1 寻找起点

在您的 Node-RED 流程中,查找 “All Block Outputs” 节点。该节点是触发并处理检测后接收摄像头数据的起点。

“所有模块输出”节点:

  • 包含所有 AI 模块的检测结果
  • 包含图像捕获信息
  • 提供创建元数据所需的数据
  • 是元数据和合格/不合格决策的来源

2.2 理解流程结构

您的流程应遵循以下模式:

Camera Trigger → AI Processing → All Block Outputs → [Your Custom Logic]

从“所有模块输出”节点需要 两条独立路径

  1. 元数据路径:All Block Outputs → Function(创建元数据)→ Capture Metadata
  2. 决策路径:All Block Outputs → Function(逻辑)→ Final Pass/Fail

重要提示: 元数据和合格/不合格决策必须从“所有模块输出”节点分支。

步骤 3:添加 Capture Metadata 节点

3.1 定位元数据节点

  1. 在左侧面板(Overview 部分)找到“Capture Metadata”节点
  2. 将“Capture Metadata”节点拖放到流程画布
  3. 将其放置在触发节点之后,但图像捕获之前

3.2 节点在流程中的位置

正确的流程结构:

All Block Outputs → Function(创建元数据)→ Capture Metadata

Function(合格/不合格逻辑)→ Final Pass/Fail

关键: “Final Pass/Fail”节点是流程正常运行的 必需节点。每个流程必须以此节点结束。

步骤 4:配置元数据字段

4.1 设置基本元数据

  1. 双击 Capture Metadata 节点
  2. 配置您想要跟踪的元数据字段
  3. 为每个字段设置数据源

4.2 元数据格式要求

重要提示: 元数据必须格式化为对象,包含:

  • 字符串键 — 字段名必须为文本
  • 字符串或数字值 — 数据可以是文本或数字

正确格式示例:

{
"part_number": "P12345",
"serial_number": "SN987654",
"operator": "John_Smith",
"shift": "A",
"quantity": 100,
"temperature": 23.5
}

步骤 5:创建元数据 Function 节点

5.1 添加用于创建元数据的 Function 节点

  1. 在“所有模块输出”和“Capture Metadata”节点之间添加一个“function”节点
  2. 双击该 function 节点进行配置
  3. 此函数将从检测结果中提取数据并创建元数据

5.2 从所有模块输出提取数据

“所有模块输出”节点提供丰富的检测数据。提取方法如下:

// 从检测结果中提取数据
const captureId = msg.payload.capture_id;
const serialNumber = msg.payload.serial_number || "No_Serial";
const inspectionTime = msg.payload.inspection_time || new Date().toISOString();

// 从检测数据创建元数据
msg.payload = {
"capture_id": captureId,
"serial_number": serialNumber,
"inspection_time": inspectionTime,
"operator": global.get("current_operator") || "Unknown"
};
return msg;

5.3 静态元数据(固定值)

对于生产过程中不变的信息:

// 设置静态元数据值
msg.payload = {
"recipe_name": "Bolt_Inspection_v2",
"line_number": "Line_3",
"shift": "A_Shift",
"station": "QC_Station_1"
};
return msg;

5.4 动态元数据(使用检测数据)

对于来自检测结果的信息:

// 提取检测数据
const captureId = msg.payload.capture_id;
const imageUrl = msg.payload.image_url;
const predictions = msg.payload.classification?.predictions || [];

// 创建动态元数据
msg.payload = {
"capture_id": captureId,
"part_number": "P" + Date.now(),
"total_rois": predictions.length,
"timestamp": new Date().toISOString(),
"batch": global.get("current_batch") || "Default_Batch"
};
return msg;

步骤 6:连接元数据和合格/不合格流程

6.1 必需的流程结构

每个流程必须包含来自“所有模块输出”的两条路径:

All Block Outputs → Function(创建元数据)→ Capture Metadata

Function(合格/不合格逻辑)→ Final Pass/Fail

6.2 连接元数据路径

  1. 将“所有模块输出”的输出连接到元数据 function 的输入
  2. 将元数据 function 的输出连接到“Capture Metadata”输入
  3. “Capture Metadata”节点可以是终端节点(无需输出连接)

6.3 连接合格/不合格路径

  1. 将“所有模块输出”的输出连接到合格/不合格逻辑 function
  2. 将逻辑 function 的输出连接到“Final Pass/Fail”输入
  3. “Final Pass/Fail”节点是强制性的 — 每个流程必须以此节点结束

6.4 合格/不合格逻辑函数示例

// 提取检测结果以决定合格/不合格
const predictions = msg.payload.classification?.predictions || [];

// 判断检测是否通过(所有 ROI 均通过)
let passed = true;
for (let prediction of predictions) {
if (!prediction.predicted_class.includes("pass")) {
passed = false;
break;
}
}

// 设置合格/不合格结果
msg.payload = passed;
return msg;

步骤 7:测试元数据配置

7.1 部署并测试

  1. 点击右上角的“Deploy”按钮
  2. 使用配置的触发方式(手动、数字输入或 PLC)触发检测
  3. 验证:
    • 图像已捕获
    • 元数据随图像显示
    • 合格/不合格决策已生成
    • 流程成功完成

7.2 验证完整流程

确认两条路径均正常工作:

元数据路径:

  • 在主界面导航至 Library
  • 查找测试图像
  • 验证图像详情中显示元数据

合格/不合格路径:

  • 检查检测结果是否显示合格/不合格状态
  • 验证“Final Pass/Fail”节点是否正确处理
  • 确认任何连接的输出(PLC、指示灯)响应正常

7.3 测试不同触发源

验证元数据在您的特定触发条件下是否有效:

手动触发:

  • 使用软件触发按钮
  • 验证每次手动捕获均带有元数据

数字输入触发:

  • 激活外部传感器/开关
  • 确认触发图像带有元数据

PLC 触发:

  • 从 PLC 发送触发信号
  • 验证元数据中包含 PLC 数据(如适用)

步骤 8:高级元数据配置

8.1 从多个全局变量获取元数据

结合存储在全局的不同数据源:

// 组合多个全局存储的数据
const operatorData = global.get("operator_info") || {};
const productData = global.get("product_info") || {};
const shiftData = global.get("shift_info") || {};

msg.payload = {
"operator": operatorData.name || "Unknown",
"operator_id": operatorData.id || "000",
"product_code": productData.code || "Default",
"product_version": productData.version || "1.0",
"shift": shiftData.current || "Day",
"line_status": "Running",
"timestamp": new Date().toISOString()
};
return msg;

步骤 9:元数据问题排查

9.1 常见问题

问题现象解决方案
元数据未显示库中无数据确认元数据节点位于主 IO Block 流程中
元数据与错误图像关联数据出现在错误的捕获图像中检查时序 — 元数据必须在图像捕获之前
触发无效无图像捕获验证 IO Block 触发配置
缺少元数据字段部分数据缺失检查 function 节点的 payload 格式
数据类型错误节点显示错误状态确保值仅为字符串或数字

9.2 调试元数据流程

添加调试节点进行排查:

  1. 在触发节点后添加调试节点,验证触发是否有效
  2. 在元数据 function 后添加调试节点,检查 payload
  3. 在 Capture Metadata 后添加调试节点,确认处理情况
  4. 查看调试面板中的错误信息

步骤 10:最佳实践

10.1 流程设计

设计高效的元数据流程:

  • 尽早设置元数据 — 在触发后立即设置元数据
  • 使用单一元数据节点 — 避免重复 Capture Metadata 节点
  • 保持流程连续性 — 元数据必须是主检测流程的一部分
  • 处理缺失数据 — 始终提供默认值

10.2 元数据字段命名

使用一致且清晰的字段名:

  • 使用下划线代替空格(如“part_number”,而非“part number”)
  • 描述性强且简洁(如“operator”,而非“op”)
  • 统一使用小写
  • 避免可能导致问题的特殊字符

10.3 性能考虑

针对高产量生产:

  • 最小化元数据大小 — 仅包含必要信息
  • 使用高效数据类型 — 尽量使用数字,字符串尽量简短
  • 避免复杂处理 — 保持元数据创建简单快速
  • 缓存全局数据 — 将常用数据存储在全局变量中

成功!您的元数据系统已准备就绪

您的元数据配置现已能够:

✅ 将自定义信息附加到每次触发的图像捕获中

✅ 跟踪与检测流程同步的生产数据

✅ 在摄像头库中存储可搜索的信息

✅ 在 HMI 中显示相关数据,供操作员查看

✅ 支持制造追溯要求

持续维护

定期系统检查

  • 验证元数据是否随触发捕获显示
  • 检查生产批次中是否缺失数据
  • 监控高触发率下的流程性能
  • 根据需求变化更新元数据字段

流程管理

  • 审查生产中的元数据时序
  • 优化 function 节点性能
  • 更新全局变量管理
  • 培训操作员正确使用触发进行操作

后续步骤

设置基于触发的元数据后:

  1. 测试所有配置的触发类型(手动、数字、PLC)
  2. 培训操作员正确使用触发捕获元数据
  3. 设置全局变量管理以支持动态数据
  4. 为不同产品线创建元数据模板
  5. 利用元数据分析实现生产监控

相关文档

  • 操作指南: 数字输入触发设置
  • 操作指南: PLC 通信设置
  • 参考资料: Node-RED 逻辑模块指南
  • 操作指南: 库管理与搜索
  • 概念介绍: 触发模式(手动、数字、传感器)